package net.chery.entity;

import jakarta.persistence.*;
import lombok.Data;
import net.chery.Cons;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.domain.Persistable;
import org.springframework.util.StringUtils;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

/**
 * @description veh_produce
 * @author gai
 * @date 2024-04-24
 */
@Entity
@Data
@DynamicUpdate
@DynamicInsert
@Table(name="sys_veh_produce")
public class VehProduce implements Serializable,Persistable<String> {

    @Serial
    private static final long serialVersionUID = 1L;

    @Transient
    private boolean isNew = true;

    /**
     * vin
     */
    @Id
    @Column(name="vin")
    private String vin;

    /**
     * 创建时间
     */
    @Column(name="create_time")
    private Date createTime;

    /**
     * 电池匹配状态
     */
    @Column(name="is_match")
    private String isMatch=Cons.NO;

    /**
     * 是否需要提交到上海
     */
    @Column(name="need_sh")
    private String needSh=Cons.NO;

    /**
     * 创建时间
     */
    @Column(name="type")
    private Integer type=0;

    /**
     * 电池溯源系统生产信息创建时间
     */
    @Column(name="produce_create_time")
    private Date produceCreateTime;

    /**
     * 车辆型号
     */
    @Column(name="veh_model_name")
    private String vehModelName;

    /**
     * 车辆名称
     */
    @Column(name="vehicle_name")
    private String vehicleName;

    /**
     * 生产日期
     */
    @Column(name="offline_production_time")
    private Date offlineProductionTime;

    /**
     * 车辆品牌
     */
    @Column(name="vehicle_brand")
    private String vehicleBrand;

    /**
     * 上报时间
     */
    @Column(name="report_time")
    private Date reportTime;

    /**
     * 上报时间
     */
    @Column(name="report_time_sh")
    private Date reportTimeSh;

    /**
     * sync_state
     */
    @Column(name="sync_state")
    private String syncState= Cons.NO;

    /**
     * sync_state_sh
     */
    @Column(name="sync_state_sh")
    private String syncStateSh= Cons.NO;

    //////////////////以下数据来自mes/////////////////

    /**
     * 燃料种类
     */
    @Column(name="fuel_type")
    private String fuelType;

    /**
     * 制造工厂
     */
    @Column(name="factory")
    private String factory;

//    /**
//     * 制造工厂
//     */
//    @Column(name="sale_type")
//    private String saleType;
//
//    /**
//     * 制造工厂
//     */
//    @Column(name="sale_type_value")
//    private String saleTypeValue;

    //////////////////以下数据来自sale/////////////////

    /**
     * 电池溯源系统销售信息创建时间
     */
    @Column(name="sale_create_time")
    private Date saleCreateTime;

    /**
     * 销售日期（溯源平台）
     */
    @Column(name="sale_time")
    private Date saleTime;

    /**
     * dms数据生成时间
     */
    @Column(name="dms_create_date")
    private Date dmsCreateDate;

    /**
     * 省-市-区，即“销售地区”
     */
    @Column(name="sale_area")
    private String saleArea;

    /**
     * 是否上传至国家平台（1是，2否）
     */
    @Column(name="sale_sync_state")
    private String saleSyncState= Cons.NO;

    /**
     * 车牌号
     */
    @Column(name="license_plate")
    private String licensePlate;

    /**
     * 上牌时间
     */
    @Column(name="license_additional_time")
    private Date licenseAdditionalTime;

    /**
     * sale_unit_code
     */
    @Column(name="sale_unit_code")
    private String saleUnitCode;

    /**
     * sale_unit_name
     */
    @Column(name="sale_unit_name")
    private String saleUnitName;

    /**
     * 是否上传至上海平台（1是，2否）
     */
    @Column(name="sale_sync_state_sh")
    private String saleSyncStateSh= Cons.NO;

    /**
     * sale_address
     */
    @Column(name="sale_address")
    private String saleAddress;

    /**
     * 销售信息上报时间
     */
    @Column(name="sale_report_time")
    private Date saleReportTime;

    /**
     * 销售信息上报时间
     */
    @Column(name="sale_report_time_sh")
    private Date saleReportTimeSh;

    /**
     * sale_area_sh
     */
    @Column(name="sale_area_sh")
    private String saleAreaSh;
    @Transient
    private Date gmtModified;
    //////////////////以下数据来自dms/////////////////

    /**
     * 营销分公司编号
     */
    @Column(name="branch_code")
    private String branchCode;

    /**
     * 营销分公司名称
     */
    @Column(name="branch_name")
    private String branchName;

    /**
     * 产品代码
     */
    @Column(name="product_code")
    private String productCode;

    /**
     * 产品名称
     */
    @Column(name="product_name")
    private String productName;

    /**
     * 售出经销商编号
     */
    @Column(name="sales_dealer_code")
    private String salesDealerCode;

    /**
     * 售出经销商名称
     */
    @Column(name="sales_dealer_name")
    private String salesDealerName;
    /**
     * 售出经销商名称
     */
    @Column(name="manufacturer_name")
    private String manufacturerName;
    /**
     * 是不是eh的车
     */
    @Column(name="eh")
    private String eh;

    @Transient
    private String modifyTime;

    @Override
    public String getId() {
        return vin;
    }

    @Override
    public boolean isNew() {
        return isNew;
    }

    @PostLoad
    public void markNotNew() {
        this.isNew = false;
    }

    public void addType(DataType type){
        this.type=type.add(this.type);
    }

    public void setVehicleBrand(String vehicleBrand) {
        String pai="牌";
        if(vehicleBrand!=null&&vehicleBrand.endsWith(pai)){
            vehicleBrand=vehicleBrand.replace(pai,"");
        }
        this.vehicleBrand = vehicleBrand;
    }

    public void setLicensePlate(String licensePlate) {
        this.needSh=Cons.NO;
        if(StringUtils.hasLength(licensePlate)){
            licensePlate=licensePlate.trim()
                    .replace(" ","")
                    .replace(".","")
                    .replace("-","")
                    .replace("·","");
            if(licensePlate.contains(Cons.SH)){
                this.needSh=Cons.YES;
            }
        }
        this.licensePlate = licensePlate;
    }

    public void setVehModelName(String vehModelName) {
        if(StringUtils.hasLength(vehModelName)){
            if (vehModelName.length()>11){
                String x=vehModelName.substring(9);
                if (x.contains(Cons.EH)){
                    setEh("1");
                } else {
                    setEh("0");
                }
            }
        }
        this.vehModelName = vehModelName;
    }
}